Current computer applications are generally more graphically intense and involve a higher degree of graphics processing power than predecessors. Applications, such as games, typically involve complex and highly detailed graphics renderings that involve a substantial amount of ongoing computations. To match the demands made by consumers for increased graphics capabilities in computing applications, like games, computer configurations have also changed.
As computers, particularly personal computers, have been programmed to handle programmers' ever increasingly demanding entertainment and multimedia applications, such as high definition video and the latest 3D games, higher demands have likewise been placed on system bandwidth. Thus, methods have arisen to deliver the bandwidth for such bandwidth hungry applications, as well as providing additional bandwidth headroom for future generations of applications.
For these reasons, current computer systems oftentimes include multiple processors. For example, a graphics processing unit (GPU) is an example of a coprocessor in addition to a primary processor, such as a central processing unit (CPU), that performs specialized processing tasks for which it is designed. In performing these tasks, the GPU may free the CPU to perform other tasks. In some cases, coprocessors, such as a GPU, may actually reside on the computer system's motherboard along with the CPU, which may be a microprocessor. However, in other applications, as one of ordinary skill in the art would know, a GPU and/or other coprocessing devices may reside on a separate but electrically coupled card, such as a graphics card in the case of the GPU.
A coprocessor such as a GPU may often access supplemental memory, such as video memory, for performing its processing tasks. Coprocessors may be generally configured and optimized for performing specialized tasks. In the case of the GPU, such devices may be optimized for execution of three dimensional graphics calculations to support applications with intensive graphics. While conventional computer systems and coprocessors may adequately perform when running a single graphically intensive application, such computer systems and coprocessors may nevertheless encounter problems when attempting to execute multiple graphically intensive applications at once.
In general, a GPU input may be represented as a stream of primitives, which are basic elements that may represent graphic elements, such as a point, line, circle, triangle, etc., which are two-dimensional primitives. In a solid modeling system, three dimensional primitives include a cylinder, cube and sphere among others, such as, in some instances, a triangle and/or a line as well. The primitives may also constitute predefined patterns with certain rules that are applied by the GPU.
Graphically intense applications can oftentimes include a variety of primitives to be processed by the GPU. A set of primitives may be defined by graphics application programming interface (API) standards, such as OpenGL (Open Graphics Library) and/or D3D (Direct 3D). OpenGL is a standard specification defining a cross-language cross-platform API for writing applications that produce 2D and 3D computer graphics. D3D is a Microsoft® standard used in conjunction with various Windows® systems for rendering 2D and 3D computer graphics.
The GPU may be called upon to process many different kinds of primitives including primitives that are legacy primitives. At the beginning of the GPU pipeline, processing components may communicate the different primitives to the various processing components in a predetermined fashion.
Yet, due to the variety and corresponding complexity of such primitives, GPU pipelines are generally configured with a large number of processing gates so as to handle the multiple types of primitives that may need processing. As some of these types of primitives are complex, the various processing components of the GPU pipeline may include, as a nonlimiting example, 200,000 additional gates so as to be able to process more complex primitives, such as a triangle fan or quad list.
By increasing the number of gates in each of the processing components of the GPU pipeline, the costs of manufacturing such GPU pipelines is expensive, but is otherwise needed in the GPU if certain types of primitives are to be processed in the GPU pipeline. But if the processing components of the GPU pipeline can be configured with a less number of gates while still somehow handling the variety of primitives that may come via the input stream to the GPU, then the associated cost of the processing components is less.
Thus, there is a heretofore-unaddressed need to overcome these deficiencies and shortcomings described above.